"""应用程序的Prometheus指标配置。

本模块设置和配置Prometheus指标，用于监控应用程序的性能和健康状况。
通过这些指标可以跟踪HTTP请求、数据库连接、业务指标等关键信息，
帮助运维人员了解应用程序的运行状态并及时发现潜在问题。
"""

from prometheus_client import Counter, Histogram, Gauge
from starlette_prometheus import metrics, PrometheusMiddleware

# 请求指标
# 统计HTTP请求总数，按方法、端点和状态码分类
http_requests_total = Counter("http_requests_total", "HTTP请求总数", ["method", "endpoint", "status"])

# HTTP请求处理时间直方图，用于监控响应时间分布
http_request_duration_seconds = Histogram(
    "http_request_duration_seconds", "HTTP请求处理时间（秒）", ["method", "endpoint"]
)

# 数据库指标
# 监控活动数据库连接数
db_connections = Gauge("db_connections", "活动数据库连接数")

# 自定义业务指标
# 跟踪处理的订单总数
orders_processed = Counter("orders_processed_total", "处理的订单总数")

# LLM推理时间指标
# 监控大语言模型推理耗时，按模型分类
llm_inference_duration_seconds = Histogram(
    "llm_inference_duration_seconds",
    "LLM推理处理时间",
    ["model"],
    buckets=[0.1, 0.3, 0.5, 1.0, 2.0, 5.0]  # 自定义时间桶，便于观察不同性能要求的推理任务
)

# LLM流式推理时间指标
# 监控大语言模型流式推理耗时，按模型分类
llm_stream_duration_seconds = Histogram(
    "llm_stream_duration_seconds",
    "LLM流式推理处理时间",
    ["model"],
    buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 10.0]  # 流式处理通常耗时更长，因此使用更大的时间桶
)


def setup_metrics(app):
    """设置Prometheus指标中间件和端点。

    Args:
        app: FastAPI应用程序实例
    """
    # 添加Prometheus中间件以自动收集HTTP指标
    app.add_middleware(PrometheusMiddleware)

    # 添加/metrics端点，供Prometheus抓取指标数据
    app.add_route("/metrics", metrics)